<%# The license inside this block applies to this file.
	# Copyright 2018 Google Inc.
	# Licensed under the Apache License, Version 2.0 (the "License");
	# you may not use this file except in compliance with the License.
	# You may obtain a copy of the License at
	#
	#     http://www.apache.org/licenses/LICENSE-2.0
	#
	# Unless required by applicable law or agreed to in writing, software
	# distributed under the License is distributed on an "AS IS" BASIS,
	# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	# See the License for the specific language governing permissions and
	# limitations under the License.
-%>
if v, ok := res["snapshotEncryptionKey"]; ok {
  original := v.(map[string]interface{})
  transformed := make(map[string]interface{})
  // The raw key won't be returned, so we need to use the original.
  transformed["rawKey"] = d.Get("snapshot_encryption_key.0.raw_key")
  transformed["sha256"] = original["sha256"]

  if kmsKeyName, ok := original["kmsKeyName"]; ok {
    // The response for crypto keys often includes the version of the key which needs to be removed
    // format: projects/<project>/locations/<region>/keyRings/<keyring>/cryptoKeys/<key>/cryptoKeyVersions/1
    transformed["kmsKeyName"] = strings.Split(kmsKeyName.(string), "/cryptoKeyVersions")[0]
  }

  if kmsKeyServiceAccount, ok := original["kmsKeyServiceAccount"]; ok {
    transformed["kmsKeyServiceAccount"] = kmsKeyServiceAccount
  }

  res["snapshotEncryptionKey"] = transformed
}

if v, ok := res["sourceDiskEncryptionKey"]; ok {
  original := v.(map[string]interface{})
  transformed := make(map[string]interface{})
  // The raw key won't be returned, so we need to use the original.
  transformed["rawKey"] = d.Get("source_disk_encryption_key.0.raw_key")
  transformed["sha256"] = original["sha256"]

  if kmsKeyName, ok := original["kmsKeyName"]; ok {
    // The response for crypto keys often includes the version of the key which needs to be removed
    // format: projects/<project>/locations/<region>/keyRings/<keyring>/cryptoKeys/<key>/cryptoKeyVersions/1
    transformed["kmsKeyName"] = strings.Split(kmsKeyName.(string), "/cryptoKeyVersions")[0]
  }

  if kmsKeyServiceAccount, ok := original["kmsKeyServiceAccount"]; ok {
    transformed["kmsKeyServiceAccount"] = kmsKeyServiceAccount
  }

  res["sourceDiskEncryptionKey"] = transformed
}

if err := d.Set("source_disk_link", ConvertSelfLinkToV1(res["sourceDisk"].(string))); err != nil {
	return nil, fmt.Errorf("Error setting source_disk_link: %s", err)
}
return res, nil
